/* Ingeniería - Editar componente patrón - Detalle */

package edu.client;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;

import edu.client.IngenieriaService.IngenieriaService;
import edu.client.IngenieriaService.IngenieriaServiceAsync;
import edu.shared.DTO.ComponentePatronDTO;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;

public class P_DetalleComponentePatron extends PopupPanel {
	
	TextBox codigoTB;
	TextBox nombreTB;
	TextBox claseEquipoTB;
	TextBox subclaseEquipoTB;
	TextBox componenteTB;
	TextBox subcomponenteTB;
	TextArea descripcionTecnicaTA;
	TextBox puntoPedidoTB;
	TextBox loteTB;
	TextBox planoTB;
	TextBox ultimaVersionTB;

	private IngenieriaServiceAsync ingenieriaService;
	
	public P_DetalleComponentePatron (String codigoComponenteSeleccionado) {
		
		super(false);
		
		LayoutPanel layoutPanel = new LayoutPanel();
		setWidget(layoutPanel);
		layoutPanel.setSize("850px", "473px");
		setStyleName("fondoPopup");
		
		ingenieriaService = GWT.create(IngenieriaService.class);
		
		// se desglosa el código
		int codigoClase = Integer.parseInt(codigoComponenteSeleccionado.substring(0, 2));
		int codigoSubclase = Integer.parseInt(codigoComponenteSeleccionado.substring(2, 4));
		int codigoComponente = Integer.parseInt(codigoComponenteSeleccionado.substring(8, 10));
		int codigoSubcomponente = Integer.parseInt(codigoComponenteSeleccionado.substring(10, 12));
		final int plano = Integer.parseInt(codigoComponenteSeleccionado.substring(13, 15));
		
		// se buscan todos los planos en su última versión, para ese componente o subcomponente patrón.
		ingenieriaService.buscarPlanosComponentePatron(codigoClase, codigoSubclase, codigoComponente, codigoSubcomponente, new AsyncCallback<List<ComponentePatronDTO>>() {
			
			@Override
			public void onSuccess(List<ComponentePatronDTO> listaComponentes) {
				cargarPantalla(listaComponentes, plano);
			}

			@Override
			public void onFailure(Throwable caught) {
				Window.alert("ERROR EN EL SERVICIO");
			}	
		});	
		
		//Sección del componente.
		Label detalleComponenteLabel = new Label("DETALLE DEL COMPONENTE PATRÓN");
		detalleComponenteLabel.setStyleName("labelTitulo");
		layoutPanel.add(detalleComponenteLabel);
		layoutPanel.setWidgetLeftWidth(detalleComponenteLabel, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(detalleComponenteLabel, 15.0, Unit.PX, 50.0, Unit.PX);
		
		Label codigoLabel = new Label("CÓDIGO:");
		codigoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		codigoLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(codigoLabel);
		layoutPanel.setWidgetLeftWidth(codigoLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(codigoLabel, 80.0, Unit.PX, 19.0, Unit.PX);
		
		codigoTB = new TextBox();
		layoutPanel.add(codigoTB);
		layoutPanel.setWidgetLeftWidth(codigoTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(codigoTB, 75.0, Unit.PX, 32.0, Unit.PX);
		codigoTB.setEnabled(false);
		
		Label claseEquipoLabel = new Label("CLASE DE EQUIPO:");
		claseEquipoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		claseEquipoLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(claseEquipoLabel);
		layoutPanel.setWidgetLeftWidth(claseEquipoLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(claseEquipoLabel, 115.0, Unit.PX, 19.0, Unit.PX);
		
		claseEquipoTB = new TextBox();
		layoutPanel.add(claseEquipoTB);
		layoutPanel.setWidgetLeftWidth(claseEquipoTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(claseEquipoTB, 110.0, Unit.PX, 32.0, Unit.PX);
		claseEquipoTB.setEnabled(false);
		
		Label componenteLabel = new Label("COMPONENTE: ");
		componenteLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		componenteLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(componenteLabel);
		layoutPanel.setWidgetLeftWidth(componenteLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(componenteLabel, 150.0, Unit.PX, 19.0, Unit.PX);
		
		componenteTB = new TextBox();
		layoutPanel.add(componenteTB);
		layoutPanel.setWidgetLeftWidth(componenteTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(componenteTB, 145.0, Unit.PX, 32.0, Unit.PX);
		componenteTB.setEnabled(false);
		
		Label descripcionTecnicaLabel = new Label("DESCRIPCIÓN TÉCNICA:");
		descripcionTecnicaLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		descripcionTecnicaLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(descripcionTecnicaLabel);
		layoutPanel.setWidgetLeftWidth(descripcionTecnicaLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(descripcionTecnicaLabel, 220.0, Unit.PX, 19.0, Unit.PX);
		
		descripcionTecnicaTA = new TextArea();
		layoutPanel.add(descripcionTecnicaTA);
		layoutPanel.setWidgetLeftWidth(descripcionTecnicaTA, 20.0, Unit.PCT, 75.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(descripcionTecnicaTA, 180.0, Unit.PX, 100.0, Unit.PX);
		descripcionTecnicaTA.setEnabled(false);
		
		Label subclaseEquipoLabel = new Label("SUBCLASE DE EQUIPO:");
		subclaseEquipoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		subclaseEquipoLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(subclaseEquipoLabel);
		layoutPanel.setWidgetLeftWidth(subclaseEquipoLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(subclaseEquipoLabel, 115.0, Unit.PX, 19.0, Unit.PX);
		
		subclaseEquipoTB = new TextBox();
		layoutPanel.add(subclaseEquipoTB);
		layoutPanel.setWidgetLeftWidth(subclaseEquipoTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(subclaseEquipoTB, 110.0, Unit.PX, 32.0, Unit.PX);
		subclaseEquipoTB.setEnabled(false);
		
		Label subcomponenteLabel = new Label("SUBCOMPONENTE:");
		subcomponenteLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		subcomponenteLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(subcomponenteLabel);
		layoutPanel.setWidgetLeftWidth(subcomponenteLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(subcomponenteLabel, 150.0, Unit.PX, 19.0, Unit.PX);
		
		subcomponenteTB = new TextBox();
		layoutPanel.add(subcomponenteTB);
		layoutPanel.setWidgetLeftWidth(subcomponenteTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(subcomponenteTB, 145.0, Unit.PX, 32.0, Unit.PX);
		subcomponenteTB.setEnabled(false);
		
		Label puntoPedidoLabel = new Label("PUNTO DE PEDIDO:");
		puntoPedidoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		puntoPedidoLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(puntoPedidoLabel);
		layoutPanel.setWidgetLeftWidth(puntoPedidoLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(puntoPedidoLabel, 295.0, Unit.PX, 19.0, Unit.PX);
		
		puntoPedidoTB = new TextBox();
		layoutPanel.add(puntoPedidoTB);
		layoutPanel.setWidgetLeftWidth(puntoPedidoTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(puntoPedidoTB, 290.0, Unit.PX, 32.0, Unit.PX);
		puntoPedidoTB.setEnabled(false);
		
		Label loteLabel = new Label("LOTE:");
		loteLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		loteLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(loteLabel);
		layoutPanel.setWidgetLeftWidth(loteLabel,  50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(loteLabel, 295.0, Unit.PX, 19.0, Unit.PX);
		
		loteTB = new TextBox();
		layoutPanel.add(loteTB);
		layoutPanel.setWidgetLeftWidth(loteTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(loteTB, 290.0, Unit.PX, 32.0, Unit.PX);
		loteTB.setEnabled(false);
		
		Label planoLabel = new Label("PLANO:");
		planoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		planoLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(planoLabel);
		layoutPanel.setWidgetLeftWidth(planoLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(planoLabel, 330.0, Unit.PX, 19.0, Unit.PX);
		
		planoTB = new TextBox();
		layoutPanel.add(planoTB);
		layoutPanel.setWidgetLeftWidth(planoTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(planoTB, 325.0, Unit.PX, 32.0, Unit.PX);
		planoTB.setEnabled(false);
		
		Label ultimaVersionLabel = new Label("ULTIMA VERSIÓN:");
		ultimaVersionLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		ultimaVersionLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(ultimaVersionLabel);
		layoutPanel.setWidgetLeftWidth(ultimaVersionLabel,  50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(ultimaVersionLabel, 330.0, Unit.PX, 19.0, Unit.PX);
		
		ultimaVersionTB = new TextBox();
		layoutPanel.add(ultimaVersionTB);
		layoutPanel.setWidgetLeftWidth(ultimaVersionTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(ultimaVersionTB, 325.0, Unit.PX, 32.0, Unit.PX);
		ultimaVersionTB.setEnabled(false);
		
		Label pieLabel = new Label("");
		pieLabel.setStyleName("labelTitulo");
		layoutPanel.add(pieLabel);
		layoutPanel.setWidgetLeftWidth(pieLabel, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetBottomHeight(pieLabel, 60.0, Unit.PX, 50.0, Unit.PX);
		
		//Botón salir
		Button salirBtn = new Button("SALIR");
		layoutPanel.add(salirBtn);
		layoutPanel.setWidgetRightWidth(salirBtn, 5.0, Unit.PCT, 10.0, Unit.PCT);
		layoutPanel.setWidgetBottomHeight(salirBtn, 22.0, Unit.PX, 28.0, Unit.PX);
		
		salirBtn.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				salir();
			}
		});
	}
	
	private void cargarPantalla(List<ComponentePatronDTO> listaComponentes, int planoElegido) {

		ComponentePatronDTO componenteSeleccionado = new ComponentePatronDTO();
		
		// se busca el plano correspondiente
		for (ComponentePatronDTO c: listaComponentes) {
			if (c.getPlano() == planoElegido) {
				componenteSeleccionado = c;
				break;
			}
		}
					
		// código del componente
		codigoTB.setText(Validaciones.rellenarCodigoComponentePatron(componenteSeleccionado));
		
		// clase
		claseEquipoTB.setText(String.valueOf(componenteSeleccionado.getNombreClase()));
		
		// subclase
		subclaseEquipoTB.setText(String.valueOf(componenteSeleccionado.getNombreSubclase()));
		
		// si se trata de un componente, colocamos el nombre en componente.
		if (componenteSeleccionado.getCodigoSubcomponente() == 0)
			componenteTB.setText(componenteSeleccionado.getNombre());
		// si se trata de un subcomponente, colocamos el nombre en subcomponente
		else
			subcomponenteTB.setText(componenteSeleccionado.getNombre());
		
		// plano
		// se da formato al número de plano.
		String plano = (String) (componenteSeleccionado.getPlano() / 10 < 1 ? "0" + componenteSeleccionado.getPlano() : componenteSeleccionado.getPlano());
		planoTB.setText(plano);
		
		// versión
		ultimaVersionTB.setText(componenteSeleccionado.getNroVersion());
		
		// descripción técnica				
		if (componenteSeleccionado.getDescripcionTecnica() == null)
			descripcionTecnicaTA.setText("NO ESPECIFICADA");
		else 
			descripcionTecnicaTA.setText(componenteSeleccionado.getDescripcionTecnica());
		
		// punto de pedido
		if (componenteSeleccionado.getPuntoPedido() == null)
			puntoPedidoTB.setText("NO ESPECIFICADO");
		else
			puntoPedidoTB.setText(String.valueOf(componenteSeleccionado.getPuntoPedido()));
		
		// lote
		if (componenteSeleccionado.getLote() == null)
			loteTB.setText("NO ESPECIFICADO");
		else
			loteTB.setText(String.valueOf(componenteSeleccionado.getLote()));
	}
	
	protected void salir() {
		this.hide();
	}	
}
